package cn.levill.api;

import cn.levill.api.dto.*;
import cn.levill.api.response.Response;

import java.util.List;

/**
 * @author Levill
 * @description 抽奖接口服务
 * @date 2025/02/14 17:38
 */
public interface IRaffleStrategyService {

    /**
     * 策略装配接口
     *
     * @param strategyId 策略 ID
     * @return {@link Response }<{@link Boolean }> 装配结果
     */
    Response<Boolean> strategyArmory(Long strategyId);


    /**
     * 查询抽奖奖品接口
     *
     * @param requestDTO 抽奖奖励列表查询参数
     * @return {@link Response }<{@link List }<{@link RaffleAwardListResponseDTO }>> 奖品列表数据
     */
    Response<List<RaffleAwardListResponseDTO>> queryRaffleAwardList(RaffleAwardListRequestDTO requestDTO);

    /**
     * 随机抽奖接口
     *
     * @param requestDTO 随机抽奖请求 DTO
     * @return {@link Response }<{@link RaffleStrategyResponseDTO }>
     */
    Response<RaffleStrategyResponseDTO> randomRaffle(RaffleStrategyRequestDTO requestDTO);

    /**
     * 查询抽奖策略权重规则，给用户展示出抽奖N次后必中奖奖品范围
     *
     * @param request 请求对象
     * @return 权重奖品配置列表「这里会返回全部，前端可按需展示一条已达标的，或者一条要达标的」
     */
    Response<List<RaffleStrategyRuleWeightResponseDTO>> queryRaffleStrategyRuleWeight(RaffleStrategyRuleWeightRequestDTO request);
}
